package com.mcxx.modules.common.service.impl;

import com.mcxx.common.exception.BizException;
import com.mcxx.modules.common.service.StatisticService;
import com.mcxx.modules.statistics.dto.CityPovertyFamilyDynamicDTO;
import com.mcxx.modules.statistics.dto.StatisticDTO;
import com.mcxx.modules.statistics.param.StatisticParam;
import com.mcxx.modules.statistics.service.read.StatisticReadService;
import com.mcxx.modules.system.entity.AreaSalvationEntity;
import com.mcxx.util.Constant;
import com.mcxx.util.FailureCode;
import com.yinhai.ta404.component.org.orguser.area.entity.TaAreaPo;
import com.yinhai.ta404.core.security.vo.UserAccountVo;
import com.yinhai.ta404.core.transaction.annotation.TaTransactional;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;


@Slf4j
@Service
@TaTransactional
public class SubComprehensiveFamilyDynamicServiceImpl extends StatisticService {

    @Autowired
    private StatisticReadService statisticReadService;

    @Override
    public List<? extends StatisticDTO> getStatistic(StatisticParam param, UserAccountVo accountVo, String standType) {

        List<TaAreaPo> taAreaPos = new ArrayList<TaAreaPo>();
        List<Integer> levels = new ArrayList<Integer>();
        String name = super.commonStatisticStart(param, accountVo, taAreaPos, levels);
        if(taAreaPos.isEmpty()){
            throw new BizException(FailureCode.ERR_100002);
        }

        TaAreaPo curTaAreaPo = taAreaPos.get(0);

        Integer level = curTaAreaPo.getAreaLevel();
        if (curTaAreaPo.getAreaLevel() < Constant.AreaLevel.COMMUNITY)
            level += 1;

        String validCode = areaUtil.getValidCode(curTaAreaPo.getAreaCode(), curTaAreaPo.getAreaLevel());

        List<CityPovertyFamilyDynamicDTO> results = null;

        if(standType.equals(Constant.BusinessStandType.CITY_DIBAO)) {
            name += "城市低保家庭动态变化统计表";
        }
        else{
            name += "农村低保家庭动态变化统计表";
        }
        results = statisticReadService.getCityPovertyFamilyDynamic(validCode, level, levels, param.getMonth(),standType,Constant.BusinessCode.DIBAO);

        List<CityPovertyFamilyDynamicDTO> lastResults = results.stream().filter(e -> !e.getAreaCode().endsWith("99900")
                && !e.getArea().startsWith("测试") && !e.getArea().endsWith("省本级")).collect(Collectors.toList());

        for (CityPovertyFamilyDynamicDTO cpfdDTO : lastResults) {
            cpfdDTO.setTitle(name);
        }
        super.commonStatisticEnd(name, null, taAreaPos, levels, lastResults);
        return lastResults;
    }

    @Override
    public void fillSalvation(StatisticDTO dto, List<String> standards, List<AreaSalvationEntity> salivations) {

    }
}
